package H.集合;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

public class _349_两个数组的交集 {
    /**
     * 数组中做过：将nums1存在set中 对nums2尽进行遍历 如果set中有 那么将该数值存在结果数组中
     * @param nums1
     * @param nums2
     * @return
     */
    public int[] intersection(int[] nums1, int[] nums2) {

        Set<Integer> set = new HashSet<>();
        Set<Integer> rs = new HashSet<>();

        for (int num:nums1){
            if (!set.contains(num)){
                set.add(num);
            }else {
                continue;
            }
        }

        for (int num:nums2){
            if (set.contains(num) && !rs.contains(num)){
                rs.add(num);
            }else {
                continue;
            }
        }

        return rs.stream().mapToInt(Integer::valueOf).toArray();

    }

    /**
     * 题解：排序加双指针--- 对数组进行排序 如果相等就两个指针一起移动 并且用一个pre来记录上一次添加进数组的值
     */
    public int[] intersection1(int[] nums1, int[] nums2) {
        Arrays.sort(nums1);
        Arrays.sort(nums2);

        Set<Integer> set = new HashSet<>();

        int i=0,j=0;
        while (i< nums1.length && j< nums2.length){
            if (nums1[i] < nums2[j]){

                i++;
            }else if (nums1[i] > nums2[j]){
                j++;
            }else {
                if(!set.contains(nums1[i])){
                    set.add(nums1[i]);
                }
                i++;
                j++;
            }
        }

        return set.stream().mapToInt(Integer::valueOf).toArray();

    }


}
